package com.zero2oneblog.handler;

import com.zero2oneblog.vo.ResponseVO;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

/*
@ControllerAdvice 是 Spring MVC 提供的注解，用于集中处理控制器的异常。它允许你在一个类中定义全局的异常处理方法，这些方法将会被所有控制器中抛出的异常调用。通常，@ControllerAdvice 用于统一处理和管理异常，以提供更好的用户体验和错误信息。

具体来说，@ControllerAdvice 主要有以下几个作用：

全局异常处理： 可以在 @ControllerAdvice 注解下的方法中定义对异常的处理逻辑。当控制器中抛出未捕获的异常时，这些方法将会被调用，允许你自定义异常的处理方式。

全局数据绑定： 通过在 @ModelAttribute 注解下的方法中定义一些数据，可以在所有控制器的方法中共享这些数据。

全局数据预处理： 通过在 @InitBinder 注解下的方法中定义一些预处理逻辑，可以在所有控制器的方法执行之前对请求数据进行处理。
 */
@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(Exception.class)
    @ResponseBody
    public ResponseVO<String> handleException(Exception e) {
        ResponseVO<String> response = new ResponseVO<>();
        response.setStatus(500);
        response.setMessage("服务器出错啦！");
        response.setData(null);
        return response;
    }
}


